home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / SerialPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-26  |  18KB  |  731 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_BAUD=1000,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  13.         GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  14.         GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_QUANTUM,GAD_SATISFY_ODU,GAD_USE_OWNDEVUNIT,GAD_RELEASE_WHEN_ONLINE,
  15.         GAD_RELEASE_WHEN_DIALING,GAD_NO_ODU_IF_SHARED,GAD_USE,GAD_CANCEL,GAD_DEFAULT,
  16.         GAD_PAGER,GAD_PAGEGROUP,GAD_DIRECT_CONNECTION
  17.     };
  18.  
  19. STATIC LONG Sizes[] =
  20. {
  21.     16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  22. };
  23.  
  24. STATIC LONG __saveds
  25. ShowBaud(struct Gadget *SomeGadget,WORD Level)
  26. {
  27.     return(BaudRates[Level]);
  28. }
  29.  
  30. STATIC LONG __saveds
  31. ShowSize(struct Gadget *SomeGadget,WORD Level)
  32. {
  33.     return(Sizes[Level]);
  34. }
  35.  
  36. STATIC LONG __saveds __asm
  37. RateHookFunc(register __a2 LONG Current,register __a1 LONG Command)
  38. {
  39.     LONG Index;
  40.  
  41.     if(Current < BaudRates[0])
  42.         Current = BaudRates[Index = 0];
  43.     else
  44.     {
  45.         if(Current > BaudRates[NumBaudRates - 1])
  46.             Current = BaudRates[Index = NumBaudRates - 1];
  47.         else
  48.         {
  49.             LONG i;
  50.  
  51.             Index = -1;
  52.  
  53.             for(i = 0 ; i < NumBaudRates ; i++)
  54.             {
  55.                 if(Current == BaudRates[i])
  56.                 {
  57.                     switch(Command)
  58.                     {
  59.                         case INCREMENTERMSG_DECREMENT:
  60.  
  61.                             if(i > 0)
  62.                                 return(BaudRates[i - 1]);
  63.                             else
  64.                                 return(Current);
  65.  
  66.                         case INCREMENTERMSG_INCREMENT:
  67.  
  68.                             if(i < NumBaudRates - 1)
  69.                                 return(BaudRates[i + 1]);
  70.                             else
  71.                                 return(Current);
  72.  
  73.                         default:
  74.  
  75.                             return(Current);
  76.                     }
  77.                 }
  78.             }
  79.  
  80.             if(Index == -1)
  81.             {
  82.                 if(Command == INCREMENTERMSG_DECREMENT)
  83.                 {
  84.                     for(i = 0 ; i < NumBaudRates ; i++)
  85.                     {
  86.                         if(BaudRates[i] <= Current)
  87.                             Index = i;
  88.                     }
  89.  
  90.                     if(BaudRates[Index] < Current || !Index)
  91.                         return(BaudRates[Index]);
  92.                     else
  93.                         return(BaudRates[Index - 1]);
  94.                 }
  95.                 else
  96.                 {
  97.                     for(i = NumBaudRates - 1 ; i >= 0 ; i--)
  98.                     {
  99.                         if(BaudRates[i] >= Current)
  100.                             Index = i;
  101.                     }
  102.  
  103.                     if(Command == INCREMENTERMSG_INITIAL)
  104.                     {
  105.                         if(Index == -1)
  106.                             return(Current);
  107.                         else
  108.                             return(BaudRates[Index]);
  109.                     }
  110.                     else
  111.                     {
  112.                         if(BaudRates[Index] > Current || Index == NumBaudRates - 1)
  113.                             return(BaudRates[Index]);
  114.                         else
  115.                             return(BaudRates[Index + 1]);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121.  
  122.     if(Index == -1 || (Command != INCREMENTERMSG_DECREMENT && Command != INCREMENTERMSG_INCREMENT))
  123.         return(Current);
  124.     else
  125.     {
  126.         if(Command == INCREMENTERMSG_DECREMENT)
  127.         {
  128.             if(Index > 0)
  129.                 return(BaudRates[Index - 1]);
  130.             else
  131.                 return(BaudRates[Index]);
  132.         }
  133.         else
  134.         {
  135.             if(Index < NumBaudRates - 1)
  136.                 return(BaudRates[Index + 1]);
  137.             else
  138.                 return(BaudRates[Index]);
  139.         }
  140.     }
  141. }
  142.  
  143. BYTE __regargs
  144. SerialPanel(struct Configuration *LocalConfig,BYTE *Default)
  145. {
  146.     STATIC struct Hook IncrementerHook =
  147.     {
  148.         {NULL},
  149.         (HOOKFUNC)RateHookFunc
  150.     };
  151.  
  152.     STATIC LONG PageTitleID[5] =
  153.     {
  154.         MSG_V36_0171,
  155.         MSG_V36_0176,
  156.         MSG_ODU_SUPPORT_TXT,
  157.         MSG_V36_0179,
  158.         -1
  159.     };
  160.  
  161.     STATIC BYTE         InitialPage = 0;
  162.  
  163.     struct LayoutHandle    *Handle;
  164.     BYTE             UseIt = FALSE;
  165.  
  166.     SaveConfig(LocalConfig,PrivateConfig);
  167.  
  168.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  169.         LH_LocaleHook,    &LocaleHook,
  170.         LH_ExitFlush,    FALSE,
  171.     TAG_DONE))
  172.     {
  173.         struct Window    *PanelWindow;
  174.         LONG         Size,Quantum,Bits,StopBits,i;
  175.  
  176.         for(i = 4 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  177.         {
  178.             if(PrivateConfig -> SerialConfig -> SerialBufferSize == Sizes[i])
  179.             {
  180.                 Size = i;
  181.  
  182.                 break;
  183.             }
  184.         }
  185.  
  186.         for(i = 0 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  187.         {
  188.             if(PrivateConfig -> SerialConfig -> Quantum == Sizes[i])
  189.             {
  190.                 Quantum = i;
  191.  
  192.                 break;
  193.             }
  194.         }
  195.  
  196.         if(PrivateConfig -> SerialConfig -> HighSpeed)
  197.         {
  198.             PrivateConfig -> SerialConfig -> BitsPerChar    = 8;
  199.             PrivateConfig -> SerialConfig -> StopBits    = 1;
  200.             PrivateConfig -> SerialConfig -> Parity        = PARITY_NONE;
  201.         }
  202.  
  203.         LT_New(Handle,
  204.             LA_Type,VERTICAL_KIND,
  205.         TAG_DONE);
  206.         {
  207.             LT_New(Handle,
  208.                 LA_Type,VERTICAL_KIND,
  209.             TAG_DONE);
  210.             {
  211.                 LT_New(Handle,
  212.                     LA_Type,    TAB_KIND,
  213.                     LA_ID,        GAD_PAGER,
  214.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  215.                     LACY_LabelTable,PageTitleID,
  216.                     LACY_AutoPageID,GAD_PAGEGROUP,
  217.                     LACY_TabKey,    TRUE,
  218.                     LA_BYTE,    &InitialPage,
  219.                     LATB_FullWidth,    TRUE,
  220.                 TAG_DONE);
  221.  
  222.                 LT_EndGroup(Handle);
  223.             }
  224.  
  225.             LT_New(Handle,
  226.                 LA_Type,    VERTICAL_KIND,
  227.                 LA_ID,        GAD_PAGEGROUP,
  228.                 LAGR_ActivePage,InitialPage,
  229.             TAG_DONE);
  230.             {
  231.                 LT_New(Handle,
  232.                     LA_Type,VERTICAL_KIND,
  233.                 TAG_DONE);
  234.                 {
  235.                     LT_New(Handle,
  236.                         LA_Type,        INTEGER_KIND,
  237.                         LA_LabelID,        MSG_SERIALPANEL_BAUD_RATE_GAD,
  238.                         LA_LONG,        &PrivateConfig -> SerialConfig -> BaudRate,
  239.                         LA_ID,            GAD_BAUD,
  240.                         GTIN_MaxChars,        8,
  241.                         LAIN_Min,        0,
  242.                         LAIN_UseIncrementers,    TRUE,
  243.                         LAIN_IncrementerHook,    &IncrementerHook,
  244.                     TAG_DONE);
  245.  
  246.                     Bits = PrivateConfig -> SerialConfig -> BitsPerChar - 7;
  247.  
  248.                     LT_New(Handle,
  249.                         LA_Type,        CYCLE_KIND,
  250.                         LA_ID,            GAD_DATABITS,
  251.                         LA_LabelID,        MSG_SERIALPANEL_BITS_PER_CHAR_GAD,
  252.                         LA_LONG,        &Bits,
  253.                         GA_Disabled,        PrivateConfig -> SerialConfig -> HighSpeed,
  254.                         LACY_FirstLabel,    MSG_SERIALPANEL_SEVEN_BITS_TXT,
  255.                         LACY_LastLabel,        MSG_SERIALPANEL_EIGHT_BITS_TXT,
  256.                     TAG_DONE);
  257.  
  258.                     LT_New(Handle,
  259.                         LA_Type,        CYCLE_KIND,
  260.                         LA_ID,            GAD_PARITY,
  261.                         LA_LabelID,        MSG_SERIALPANEL_PARITY_GAD,
  262.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> Parity,
  263.                         GA_Disabled,        PrivateConfig -> SerialConfig -> HighSpeed,
  264.                         LACY_FirstLabel,    MSG_SERIALPANEL_NO_PARITY_TXT,
  265.                         LACY_LastLabel,        MSG_SERIALPANEL_SPACE_TXT,
  266.                     TAG_DONE);
  267.  
  268.                     StopBits = PrivateConfig -> SerialConfig -> StopBits - 1;
  269.  
  270.                     LT_New(Handle,
  271.                         LA_Type,        CYCLE_KIND,
  272.                         LA_ID,            GAD_STOPBITS,
  273.                         LA_LabelID,        MSG_SERIALPANEL_STOP_BITS_GAD,
  274.                         LA_LONG,        &StopBits,
  275.                         GA_Disabled,        PrivateConfig -> SerialConfig -> HighSpeed,
  276.                         LACY_FirstLabel,    MSG_SERIALPANEL_ONE_BIT_TXT,
  277.                         LACY_LastLabel,        MSG_SERIALPANEL_TWO_BITS_TXT,
  278.                     TAG_DONE);
  279.  
  280.                     LT_New(Handle,
  281.                         LA_Type,        CYCLE_KIND,
  282.                         LA_LabelID,        MSG_SERIALPANEL_HANDSHAKING_GAD,
  283.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> HandshakingProtocol,
  284.                         LACY_FirstLabel,    MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,
  285.                         LACY_LastLabel,        MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT,
  286.                     TAG_DONE);
  287.  
  288.                     LT_New(Handle,
  289.                         LA_Type,        CYCLE_KIND,
  290.                         LA_LabelID,        MSG_SERIALPANEL_DUPLEX_GAD,
  291.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> Duplex,
  292.                         LACY_FirstLabel,    MSG_SERIALPANEL_DUPLEX_FULL_TXT,
  293.                         LACY_LastLabel,        MSG_SERIALPANEL_DUPLEX_HALF_TXT,
  294.                     TAG_DONE);
  295.  
  296.                     LT_New(Handle,
  297.                         LA_Type,        SliderType,
  298.                         LA_LabelID,        MSG_SERIALPANEL_BUFFER_SIZE_GAD,
  299.                         LA_LONG,        &Size,
  300.                         GTSL_Min,        4,
  301.                         GTSL_Max,        (sizeof(Sizes) / sizeof(LONG)) - 1,
  302.                         GTSL_DispFunc,        ShowSize,
  303.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  304.                     TAG_DONE);
  305.  
  306.                     LT_New(Handle,
  307.                         LA_Type,        INTEGER_KIND,
  308.                         LA_LabelID,        MSG_SERIALPANEL_BREAK_LENGTH_GAD,
  309.                         LA_LONG,        &PrivateConfig -> SerialConfig -> BreakLength,
  310.                         GTIN_MaxChars,        8,
  311.                     TAG_DONE);
  312.  
  313.                     LT_New(Handle,
  314.                         LA_Type,        CHECKBOX_KIND,
  315.                         LA_LabelID,        MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD,
  316.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> HighSpeed,
  317.                         LA_ID,            GAD_HIGHSPEED,
  318.                     TAG_DONE);
  319.  
  320.                     LT_EndGroup(Handle);
  321.                 }
  322.  
  323.                 LT_New(Handle,
  324.                     LA_Type,VERTICAL_KIND,
  325.                 TAG_DONE);
  326.                 {
  327.                     LT_New(Handle,
  328.                         LA_Type,        CHECKBOX_KIND,
  329.                         LA_LabelID,        MSG_SERIALPANEL_STRIP_BIT_8_GAD,
  330.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> StripBit8,
  331.                     TAG_DONE);
  332.  
  333.                     LT_New(Handle,
  334.                         LA_Type,        CHECKBOX_KIND,
  335.                         LA_LabelID,        MSG_SERIALPANEL_SHARED_ACCESS_GAD,
  336.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> Shared,
  337.                         LA_ID,            GAD_SHARED,
  338.                     TAG_DONE);
  339.  
  340.                     LT_New(Handle,
  341.                         LA_Type,        CHECKBOX_KIND,
  342.                         LA_LabelID,        MSG_SERIALPANEL_XON_XOFF_GAD,
  343.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> xONxOFF,
  344.                     TAG_DONE);
  345.  
  346.                     LT_New(Handle,
  347.                         LA_Type,        CHECKBOX_KIND,
  348.                         LA_LabelID,        MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD,
  349.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> PassThrough,
  350.                     TAG_DONE);
  351.  
  352.                     LT_New(Handle,
  353.                         LA_Type,        CHECKBOX_KIND,
  354.                         LA_LabelID,        MSG_SERIALPANEL_CHECK_CARRIER_GAD,
  355.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> CheckCarrier,
  356.                         GA_Disabled,        PrivateConfig -> SerialConfig -> DirectConnection,
  357.                         LA_ID,            GAD_CHECK_CARRIER,
  358.                     TAG_DONE);
  359.  
  360.                     LT_New(Handle,
  361.                         LA_Type,        CHECKBOX_KIND,
  362.                         LA_LabelID,        MSG_DIRECT_CONNECTION_GAD,
  363.                         LA_BYTE,        &PrivateConfig -> SerialConfig -> DirectConnection,
  364.                         LA_ID,            GAD_DIRECT_CONNECTION,
  365.                     TAG_DONE);
  366.  
  367.                     LT_New(Handle,
  368.                         LA_Type,        SliderType,
  369.                         LA_LabelID,        MSG_SERIALPANEL_QUANTUM_GAD,
  370.                         LA_LONG,        &Quantum,
  371.                         LA_Chars,        6,
  372.                         GTSL_Min,        0,
  373.                         GTSL_Max,        (sizeof(Sizes) / sizeof(LONG)) - 1,
  374.                         GTSL_Level,        Quantum,
  375.                         GTSL_DispFunc,        ShowSize,
  376.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  377.                     TAG_DONE);
  378.  
  379.                     LT_EndGroup(Handle);
  380.                 }
  381.  
  382.                 LT_New(Handle,
  383.                     LA_Type,VERTICAL_KIND,
  384.                 TAG_DONE);
  385.                 {
  386.                     LT_New(Handle,
  387.                         LA_Type,VERTICAL_KIND,
  388.                     TAG_DONE);
  389.                     {
  390.                         LT_New(Handle,
  391.                             LA_Type,        CHECKBOX_KIND,
  392.                             LA_LabelID,        MSG_SERIALPANEL_USE_OWNDEVUNIT_TXT,
  393.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  394.                             LA_ID,            GAD_USE_OWNDEVUNIT,
  395.                             LA_LabelPlace,        PLACE_RIGHT,
  396.                         TAG_DONE);
  397.  
  398.                         LT_New(Handle,
  399.                             LA_Type,        CHECKBOX_KIND,
  400.                             LA_LabelID,        MSG_DO_NOT_USE_IF_DEVICE_IS_IN_SHARED_MODE_TXT,
  401.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> NoODUIfShared,
  402.                             LA_ID,            GAD_NO_ODU_IF_SHARED,
  403.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  404.                             LA_LabelPlace,        PLACE_RIGHT,
  405.                         TAG_DONE);
  406.  
  407.                         LT_New(Handle,
  408.                             LA_Type,        CHECKBOX_KIND,
  409.                             LA_LabelID,        MSG_RELEASE_DEVICE_WHEN_ONLINE_TXT,
  410.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> ReleaseODUWhenOnline,
  411.                             LA_ID,            GAD_RELEASE_WHEN_ONLINE,
  412.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  413.                             LA_ExtraSpace,        TRUE,
  414.                             LA_LabelPlace,        PLACE_RIGHT,
  415.                         TAG_DONE);
  416.  
  417.                         LT_New(Handle,
  418.                             LA_Type,        CHECKBOX_KIND,
  419.                             LA_LabelID,        MSG_RELEASE_DEVICE_WHEN_DIALING_TXT,
  420.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> ReleaseODUWhenDialing,
  421.                             LA_ID,            GAD_RELEASE_WHEN_DIALING,
  422.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  423.                             LA_LabelPlace,        PLACE_RIGHT,
  424.                         TAG_DONE);
  425.  
  426.                         LT_New(Handle,
  427.                             LA_Type,        MX_KIND,
  428.                             LA_LabelID,        MSG_SATISFY_ODU_TXT,
  429.                             LA_BYTE,        &PrivateConfig -> SerialConfig -> SatisfyODURequests,
  430.                             LA_ID,            GAD_SATISFY_ODU,
  431.                             LACY_FirstLabel,    MSG_SATISFY_ODU_MODE1_TXT,
  432.                             LACY_LastLabel,        MSG_SATISFY_ODU_MODE3_TXT,
  433.                             GA_Disabled,        !PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  434.                             LA_ExtraSpace,        TRUE,
  435.                         TAG_DONE);
  436.  
  437.                         LT_EndGroup(Handle);
  438.                     }
  439.  
  440.                     LT_EndGroup(Handle);
  441.                 }
  442.  
  443.                 LT_New(Handle,
  444.                     LA_Type,VERTICAL_KIND,
  445.                 TAG_DONE);
  446.                 {
  447.                     LT_New(Handle,
  448.                         LA_Type,        STRING_KIND,
  449.                         LA_LabelID,        MSG_SERIALPANEL_SERIAL_DEVICE_GAD,
  450.                         LA_Chars,        20,
  451.                         LA_STRPTR,        PrivateConfig -> SerialConfig -> SerialDevice,
  452.                         GTST_MaxChars,        255,
  453.                         LAST_Picker,        TRUE,
  454.                         LA_ID,            GAD_DEVICE,
  455.                     TAG_DONE);
  456.  
  457.                     LT_New(Handle,
  458.                         LA_Type,        INTEGER_KIND,
  459.                         LA_LabelID,        MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD,
  460.                         LA_LONG,        &PrivateConfig -> SerialConfig -> UnitNumber,
  461.                         LA_ID,            GAD_UNIT,
  462.                         LAIN_UseIncrementers,    TRUE,
  463.                         GTIN_MaxChars,        8,
  464.                     TAG_DONE);
  465.  
  466.                     LT_EndGroup(Handle);
  467.                 }
  468.  
  469.                 LT_EndGroup(Handle);
  470.             }
  471.  
  472.             LT_New(Handle,
  473.                 LA_Type,VERTICAL_KIND,
  474.             TAG_DONE);
  475.             {
  476.                 LT_New(Handle,
  477.                     LA_Type,    XBAR_KIND,
  478.                     LAXB_FullSize,    TRUE,
  479.                 TAG_DONE);
  480.  
  481.                 LT_EndGroup(Handle);
  482.             }
  483.  
  484.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  485.                 LAGR_SameSize,    TRUE,
  486.                 LAGR_Spread,    TRUE,
  487.             TAG_DONE);
  488.             {
  489.                 LT_New(Handle,
  490.                     LA_Type,    BUTTON_KIND,
  491.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  492.                     LA_ID,        GAD_USE,
  493.                     LABT_ReturnKey,    TRUE,
  494.                     LABT_ExtraFat,    TRUE,
  495.                 TAG_DONE);
  496.  
  497.                 if(Default)
  498.                 {
  499.                     LT_New(Handle,
  500.                         LA_Type,    BUTTON_KIND,
  501.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  502.                         LA_ID,        GAD_DEFAULT,
  503.                         LABT_ExtraFat,    TRUE,
  504.                     TAG_DONE);
  505.                 }
  506.  
  507.                 LT_New(Handle,
  508.                     LA_Type,    BUTTON_KIND,
  509.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  510.                     LA_ID,        GAD_CANCEL,
  511.                     LABT_EscKey,    TRUE,
  512.                     LABT_ExtraFat,    TRUE,
  513.                 TAG_DONE);
  514.  
  515.                 LT_EndGroup(Handle);
  516.             }
  517.  
  518.             LT_EndGroup(Handle);
  519.         }
  520.  
  521.         if(PanelWindow = LT_Build(Handle,
  522.             LAWN_TitleID,        MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT,
  523.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  524.             LAWN_HelpHook,        &GuideHook,
  525.             LAWN_Parent,        Window,
  526.             WA_DepthGadget,        TRUE,
  527.             WA_CloseGadget,        TRUE,
  528.             WA_DragBar,        TRUE,
  529.             WA_RMBTrap,        TRUE,
  530.             WA_Activate,        TRUE,
  531.             WA_SimpleRefresh,    TRUE,
  532.         TAG_DONE))
  533.         {
  534.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH];
  535.             struct IntuiMessage    *Message;
  536.             ULONG             MsgClass;
  537.             UWORD             MsgCode;
  538.             struct Gadget        *MsgGadget;
  539.             BOOLEAN             Done = FALSE;
  540.  
  541.             GuideContext(CONTEXT_SERIAL);
  542.  
  543.             PushWindow(PanelWindow);
  544.  
  545.             LT_ShowWindow(Handle,TRUE);
  546.  
  547.             do
  548.             {
  549.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  550.                     break;
  551.  
  552.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  553.                 {
  554.                     MsgClass    = Message -> Class;
  555.                     MsgCode        = Message -> Code;
  556.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  557.  
  558.                     LT_ReplyIMsg(Message);
  559.  
  560.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  561.                         Done = TRUE;
  562.  
  563.                     if(MsgClass == IDCMP_GADGETUP)
  564.                     {
  565.                         switch(MsgGadget -> GadgetID)
  566.                         {
  567.                             case GAD_USE_OWNDEVUNIT:
  568.  
  569.                                 LT_SetAttributes(Handle,GAD_SATISFY_ODU,
  570.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  571.                                 TAG_DONE);
  572.  
  573.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_ONLINE,
  574.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  575.                                 TAG_DONE);
  576.  
  577.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_DIALING,
  578.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  579.                                 TAG_DONE);
  580.  
  581.                                 LT_SetAttributes(Handle,GAD_NO_ODU_IF_SHARED,
  582.                                     GA_Disabled,!PrivateConfig -> SerialConfig -> UseOwnDevUnit,
  583.                                 TAG_DONE);
  584.  
  585.                                 break;
  586.  
  587.                             case GAD_HIGHSPEED:
  588.  
  589.                                 if(MsgCode)
  590.                                 {
  591.                                     LT_SetAttributes(Handle,GAD_PARITY,
  592.                                         GA_Disabled,    TRUE,
  593.                                         GTCY_Active,    PARITY_NONE,
  594.                                     TAG_DONE);
  595.  
  596.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  597.                                         GA_Disabled,    TRUE,
  598.                                         GTCY_Active,    0,
  599.                                     TAG_DONE);
  600.  
  601.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  602.                                         GA_Disabled,    TRUE,
  603.                                         GTCY_Active,    1,
  604.                                     TAG_DONE);
  605.                                 }
  606.                                 else
  607.                                 {
  608.                                     LT_SetAttributes(Handle,GAD_PARITY,
  609.                                         GA_Disabled,    FALSE,
  610.                                     TAG_DONE);
  611.  
  612.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  613.                                         GA_Disabled,    FALSE,
  614.                                     TAG_DONE);
  615.  
  616.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  617.                                         GA_Disabled,    FALSE,
  618.                                     TAG_DONE);
  619.                                 }
  620.  
  621.                                 break;
  622.  
  623.                             case GAD_DIRECT_CONNECTION:
  624.  
  625.                                 LT_SetAttributes(Handle,GAD_CHECK_CARRIER,
  626.                                     GA_Disabled,    MsgCode,
  627.                                 TAG_DONE);
  628.  
  629.                                 break;
  630.  
  631.                             case GAD_USE:
  632.  
  633.                                 LT_UpdateStrings(Handle);
  634.  
  635.                                 LocalConfig -> SerialConfig -> SerialBufferSize    = Sizes[Size];
  636.                                 LocalConfig -> SerialConfig -> Quantum        = Sizes[Quantum];
  637.                                 LocalConfig -> SerialConfig -> BitsPerChar    = Bits + 7;
  638.                                 LocalConfig -> SerialConfig -> StopBits        = StopBits + 1;
  639.  
  640.                                 UseIt = Done = TRUE;
  641.  
  642.                                 break;
  643.  
  644.                             case GAD_CANCEL:
  645.  
  646.                                 Done = TRUE;
  647.                                 break;
  648.  
  649.                             case GAD_DEFAULT:
  650.  
  651.                                 *Default = TRUE;
  652.  
  653.                                 UseIt = Done = TRUE;
  654.                                 break;
  655.  
  656.                             case GAD_DEVICE:
  657.  
  658.                                 FindLibDev(PanelWindow,LT_GetString(Handle,MsgGadget -> GadgetID),NT_DEVICE,NULL);
  659.                                 break;
  660.                         }
  661.                     }
  662.  
  663.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_DEVICE)
  664.                     {
  665.                         LT_LockWindow(PanelWindow);
  666.  
  667.                         strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_DEVICE));
  668.                         strcpy(SharedBuffer,DummyBuffer);
  669.  
  670.                         if(PickFile(PanelWindow,"Devs:","#?.device",LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),SharedBuffer,NT_DEVICE))
  671.                         {
  672.                             if(Stricmp(DummyBuffer,SharedBuffer))
  673.                             {
  674.                                 LT_SetAttributes(Handle,GAD_DEVICE,GTST_String,SharedBuffer,TAG_DONE);
  675.  
  676.                                 FindLibDev(PanelWindow,SharedBuffer,NT_DEVICE,NULL);
  677.                             }
  678.                         }
  679.  
  680.                         LT_UnlockWindow(PanelWindow);
  681.  
  682.                         LT_ShowWindow(Handle,TRUE);
  683.                     }
  684.                 }
  685.             }
  686.             while(!Done);
  687.  
  688.             PopWindow();
  689.         }
  690.  
  691.         LT_DeleteHandle(Handle);
  692.     }
  693.  
  694.     if(UseIt)
  695.     {
  696.         if(Config -> MiscConfig -> ProtectiveMode)
  697.         {
  698.             if(PrivateConfig -> SerialConfig -> BaudRate >= 4800 && PrivateConfig -> SerialConfig -> HandshakingProtocol == HANDSHAKING_NONE && !PrivateConfig -> SerialConfig -> DirectConnection)
  699.             {
  700.                 if(MyEasyRequest(Window,LocaleString(MSG_NO_RTSCTS_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),PrivateConfig -> SerialConfig -> BaudRate))
  701.                     PrivateConfig -> SerialConfig -> HandshakingProtocol = HANDSHAKING_RTSCTS_DSR;
  702.             }
  703.         }
  704.  
  705.             /* Is the device driver closed up and is the main
  706.              * program making the call?
  707.              */
  708.  
  709.         if(!Default && !ReadRequest)
  710.         {
  711.                 /* Is the serial configuration any different?
  712.                  * If not, zap the serial device name in the
  713.                  * alternate buffer to force the driver to
  714.                  * get reopened.
  715.                  */
  716.  
  717.             if(!memcmp(Config -> SerialConfig,PrivateConfig -> SerialConfig,sizeof(struct SerialSettings)))
  718.                 Config -> SerialConfig -> SerialDevice[0] = 0;
  719.         }
  720.     }
  721.  
  722.         // The edited settings are now in PrivateConfig
  723.  
  724.     if(UseIt)
  725.         SwapConfig(PrivateConfig,LocalConfig);
  726.     else
  727.         SaveConfig(LocalConfig,PrivateConfig);
  728.  
  729.     return(UseIt);
  730. }
  731.